package uu.game.majiang.core;

/**
 * 摸到牌后，或者别人出牌后，游戏者允许的操作(即需要游戏者选择的操作) <br/>
 * <br/>
 * 摸到牌后，可能的操作有：和牌、暗杠(最多3种)、明杠碰过的牌(最多3种)、补花 <br/>
 * 别人出牌后，可能的操作有：和牌、吃(最多3种)、碰(1种)、明杠(1种)<br/>
 */
public interface Operation {

    public static int TYPE_CHI = 1;
    public static int TYPE_PENG = 2;
    public static int TYPE_GANG = 3;
    public static int TYPE_BUHUA = 4;
    public static int TYPE_HU = 5;
    
    /**
     * 操作类型。
     * 
     * @return 操作类型
     */
    int getType();
    
    /**
     * 得到操作对应的牌面。 吃碰杠操作会对应所形成的3或4张牌，和牌对应要和的牌， 补花不对应牌(因为有多张花可以补花时不允许选择补哪张花，也没必要)
     * 
     * @return 牌面
     */
    int[] getPais();
    
    /**
     * 执行此操作，补花和杠牌后应该补牌，也在此方法完成
     */
    void execute();
    
    /**
     * 操作哪家的牌
     * 
     * @return 哪家的牌
     */
    RelativeFangwei who();
    
}